package com.linkgie.galaxyframework.metric;

import com.linkgie.galaxyframework.metadata.DataEntity;
import com.linkgie.galaxyframework.metadata.DataField;
import com.linkgie.galaxyframework.metadata.DataInterface;

/**
 * 指标；
 * <p>
 * 此对象是有状态的，通过 {@link #getValue()} 方法能够获得指标的最新值；
 */
public interface Metric extends KeyValueMetric {

    /**
     * 返回指标当前值的值对象；
     * <p>
     * “值对象”是一个带元数据标注的无状态对象；
     * <p>
     * 与元数据框架结合使用可以对指标值进行格式化显示；
     * 
     * @return
     */
    <T extends KeyValueMetric> T getValueObject();

    /**
     * “值对象”的类型；
     * <p>
     * 值对象类型基于元数据标注 {@link DataEntity}、 {@link DataInterface}、 {@link DataField}
     * 等标注类型定义了指标数据的格式化显示；
     * 
     * @return
     */
    Class<? extends KeyValueMetric> getValueObjectType();

}
